// 封装思想：默认参数的处理
// 第一个参数必传
// 第二个参数可选，为对象
// 第三个参数必传，为函数
// const obj = {
//     get1:function(colName, where={}, success){
//         console.log(colName, where, success)
//     },
//     get2:function(colName, where={}, success){
//         if(typeof where === "function"){
//             success = where;
//             where = {};
//         }
//         console.log(colName, where, success)
//     }
// }
// obj.get1("admin", ()=>{});
// obj.get1("admin", {}, ()=>{});
// obj.get2("admin", ()=>{});
// obj.get2("admin", {}, ()=>{});

// 暴露一个对象，对象内是各种数据操作方法
const obj = {
    // 获取数据：集合对象，条件，成功的回调，失败的回调
    // 通过传入不同的条件，可以实现：
        // 查询指定数据
        // 查询所有
        // 或查询
        // 模糊查询
        // 区间查询
    get(colObj, where, success, error){
        if(typeof where === "function"){
            success = where;
            where = {};
        }
        colObj.find(where, {_id:0,__v:0}, (err, data)=>{
            if(err){
                error(err);
            }else{
                success(data);
            }
        })
    },
    getSort(colObj, sort, where={}, success, error){
        if(typeof where === "function"){
            success = where;
            where = {};
        }
        colObj.find(where, {_id:0,__v:0}).sort(sort).exec((err, data)=>{
            if(err){
                error(err);
            }else{
                success(data);
            }
        })
    },
    getPage(colObj, index, num, where, success, error){
        if(typeof where === "function"){
            success = where;
            where = {};
        }
        colObj.find(where, {_id:0,__v:0}).limit(num).skip(index*num).exec((err, data)=>{
            if(err){
                error(err);
            }else{
                success(data);
            }
        })
    },
    getKind(colObj, filed, success, error){
        colObj.distinct(filed).exec((err, data)=>{
            if(err){
                error(err);
            }else{
                success(data);
            }
        })
    },
    getCount(colObj, success, error){
        colObj.count().exec((err, data)=>{
            if(err){
                error(err);
            }else{
                success(data);
            }
        })
    },
    add(colObj, data, success, error){
        colObj.insertMany(data, (err)=>{
            if(err){
                error(err);
            }else{
                success();
            }
        })
    },
    del(colObj, where, num, success, error){
        if(typeof num === "function"){
            success = num;
            num = 1;
        }
        let x = num===1 ? "deleteOne" : "deleteMany";
        colObj[x](where, (err)=>{
            if(err){
                error(err);
            }else{
                success();
            }
        })
    },
    set(colObj, where, data, num, success, error){
        if(typeof num === "function"){
            success = num;
            num = 1;
        }
        let x = num===1 ? "updateOne" : "updateMany";
        colObj[x](where, data, (err)=>{
            if(err){
                error(err);
            }else{
                success();
            }
        })
    }
}
module.exports = obj;
